Bump JasperFx 2.37.2 → 2.38.0, Weasel 9.23.1 → 9.23.2, and adopt compliance wave 3 - #407
Merged
Merged
Conversation
…cing tests Closes #399. Companion to jasperfx#613 (epic marten#5110, marten#5118). Retired, and what replaced each: - Events/activity_correlation_tests.cs -> ActivityCorrelationCompliance - Projections/single_stream_projection_with_string_identity_tests.cs -> StringIdentitySingleStreamCompliance With those gone, no file in Polecat.Tests duplicates a Marten test except Linq/additional_linq_operator_tests.cs, which the shared library cannot absorb: LINQ is document-database behavior and JasperFx.Events.ComplianceTests spans only event sourcing. Polecat still re-declares IDocumentStore/IDocumentSession/ IQuerySession in its own namespace, so there is nothing for a document-db compliance suite to be generic over yet. Two markers, opposite meanings, now documented in CLAUDE.md and on the LINQ file. `ported:` means a file duplicates another store's test and should move into a shared suite. A bare `marten#NNNN` citation means Polecat implemented the same feature and the number is provenance worth keeping. Fourteen files carry the latter and none of them is porting work -- counting them is what made #399 originally read as sixteen files instead of three, and the count grows with every parity feature, so it can never converge. PolecatComplianceFixture picks up the seam the new suites need: StreamIdentity and EnableCorrelationTracking handling in BuildStoreAsync, plus CorrelationIdFor, CausationIdFor and SetCorrelationId. The alias file gains a fourth global using, and unlike the other three it names a closed generic, because the single stream projection base is generic over the identity type as well as the document. aggregateto_linq_operator_tests reached into the retired string-identity file for SelfAggregatingStringQuest. It now declares its own AggregateToStringQuest: the shared library's equivalent folds the compliance suite's events, not Polecat's. projection_sg_dispatch_audit_tests needed no change -- its rows bind to the compliance library's types by name, the way waves 1 and 2 already left it -- but docs/projection-sg-audit-108.md was citing four files that waves 1-3 deleted, so those rows now point at the suite that owns each type. Also adds a ComplianceSourceDir dev-loop escape hatch to Polecat.Tests.csproj: build with -p:ComplianceSourceDir=<path> to compile a working copy of the suites instead of the package, which is how wave 3 was validated before the release. Compliance namespace 65/65, full suite 1660 with 0 failures.
The half this bump consumes is jasperfx#613, compliance wave 3: the ActivityCorrelationCompliance and StringIdentitySingleStreamCompliance suites the previous commit enrolls only exist from 2.38.0 on. Also riding along in 2.38.0, none of it consumed here: - jasperfx#616 lifts Marten's ProjectionScenario test harness into a new JasperFx.Events.TestSupport namespace. That is what #404 will consume to delete Polecat's seven-file twin under Events/TestSupport/, and it is the larger piece of work this bump unblocks. Nothing here depends on it and the namespaces do not collide, so it stays a separate change. - jasperfx#611: EventProjection published types are discovered semantically rather than syntactically. - jasperfx#615 (#598/#610): the blue/green side-effect gate warm-up moved off the agent start path. - jasperfx#617 (marten#5095): container-scoped projections usable by live aggregation, and validated. Weasel 9.23.2 is taken for matrix coherence -- weasel#425 is itself just the JasperFx 2.38.0 floor. The only other change, weasel#423, gives Sqlite and MySql the non-generic Weasel.Core.ICommandBuilder and touches no SQL Server surface. Verified against a freshly created container, so no stale pc_ tables could mask a schema-shape regression.
This was referenced Aug 3, 2026
Merged
jeremydmiller
added a commit
that referenced
this pull request
Aug 3, 2026
Minor rather than patch: 5.9.1's line added public surface (IEventBinarySerializer, EventStoreOptions.AddEventType/AddEventTypes) and moved the whole JasperFx/Weasel matrix forward. Since 5.9.1: - feat: pluggable binary event serialization via IEventBinarySerializer (#388/#402) - feat: EventStoreOptions.AddEventType / AddEventTypes (#395/#396) - fix: escape interpolated identifiers and literals in constructed SQL (#390/#403) - fix: throw a lone DcbConcurrencyException unwrapped from SaveChangesAsync (#394/#397) - deps: JasperFx 2.37.2 -> 2.38.0, Weasel 9.23.0 -> 9.23.2 (#405, #407) - Polecat's ProjectionScenario is now a thin subclass of the lifted JasperFx.Events.TestSupport harness rather than a seven-file copy of Marten's (#404/#408, jasperfx#616) -- a behavior change for anyone already using it, see the release notes - test infrastructure: compliance waves 1-3 (#393, #400, #407), parallel-safe test suite (#389), IntegrationContext.StoreOptions document cleaning (#398/#401)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Supersedes #406, which pinned 2.37.3 — a version that was never published; the wave-3 suites shipped
in 2.38.0 instead. Rather than leave a bump PR and a blocked adoption PR racing on the same
Directory.Packages.props, this carries both. Closes #399.The bump
JasperFx.RuntimeCompilerstays at 5.0.0 — already latest.The half this bump actually consumes is jasperfx#613, compliance wave 3. Also in 2.38.0 and
deliberately not consumed here:
ProjectionScenarioharness into a newJasperFx.Events.TestSupportnamespace. That is what Consume the lifted JasperFx.Events ProjectionScenario #404 will consume to delete Polecat'sseven-file twin under
Events/TestSupport/, and it is the larger piece of work this bump unblocks.Nothing here depends on it and the namespaces do not collide, so it stays a separate change.
jasperfx#615 (blue/green side-effect gate warm-up off the agent start path, #598/#610),
jasperfx#617 (container-scoped projections usable by live aggregation, marten#5095).
Weasel 9.23.2 is taken for matrix coherence — weasel#425 is itself just the JasperFx 2.38.0 floor.
Its only other change, weasel#423, gives Sqlite and MySql the non-generic
Weasel.Core.ICommandBuilderand touches no SQL Server surface.Compliance wave 3 (was #406)
Events/activity_correlation_tests.cs(4)ActivityCorrelationComplianceProjections/single_stream_projection_with_string_identity_tests.cs(6)StringIdentitySingleStreamComplianceTen suites now enrolled across three waves; the compliance namespace goes 55 → 65 and the full suite
stays at 1660, because the ten tests moved rather than multiplied.
The exit criterion, restated. No file in
Polecat.Testsduplicates a Marten test exceptLinq/additional_linq_operator_tests.cs, which the shared library cannot absorb: LINQ isdocument-database behavior and
JasperFx.Events.ComplianceTestsspans only event sourcing. Parked inmarten#5118. Per #399's third suggestion the two marker kinds are now greppable apart and documented
in
CLAUDE.md—ported:means a file duplicates another store's test; a baremarten#NNNNmeansPolecat implemented the same feature and the number is provenance. Fourteen files carry the latter
and none is porting work, which is what made #399 originally read as sixteen files instead of three.
Fixture and project changes:
StreamIdentity/EnableCorrelationTrackinghandling plusCorrelationIdFor/CausationIdFor/SetCorrelationIdonPolecatComplianceFixture; a fourth globalalias (a closed generic, since the single stream projection base is generic over identity as well
as document);
aggregateto_linq_operator_testsnow declares its ownAggregateToStringQuestbecausethe shared library's equivalent folds the compliance suite's events, not Polecat's; and
docs/projection-sg-audit-108.mdstops citing four files that waves 1–3 deleted. A new-p:ComplianceSourceDir=<path>hook builds a working copy of the suites instead of the package,which is how a wave gets validated before its release.
Verification
Restore, full multi-TFM build, then the suite against a freshly created container, so no stale
pc_tables could mask a schema-shape regression:🤖 Generated with Claude Code
https://claude.ai/code/session_01G8tN8ApXiKhyVzia4iwmof